import 'dart:async';

import 'package:get/get.dart';
import '../Home/health_score_logic.dart';

/// 手机降温逻辑控制器
/// 负责：动画进度、状态切换（降温中/完成）、提示语与目标降温值
class PhoneCoolDownLogic extends GetxController {
  /// 是否正在降温中
  final RxBool isCooling = true.obs;

  /// 是否展示完成页面
  final RxBool showSuccess = false.obs;

  /// 动画/进度（0~1）
  final RxDouble progress = 0.0.obs;

  /// 状态提示文案
  final RxString statusText = '正在降温中'.obs;

  /// 目标预计降温（℃），与截图保持一致为3.0℃
  final RxDouble targetDropDegrees = 3.0.obs;

  Timer? _timer;

  @override
  void onReady() {
    super.onReady();
    // 页面展示后自动开始降温动画
    startCooling();
  }

  /// 启动降温流程（模拟动画与完成效果）
  /// 为保证视觉流畅，这里使用定时器逐步增加progress，约2.4s完成。
  void startCooling() {
    isCooling.value = true;
    showSuccess.value = false;
    statusText.value = '正在降温中';
    progress.value = 0.0;

    // 以60ms一帧，40帧约2.4s
    int tick = 0;
    _timer?.cancel();
    _timer = Timer.periodic(const Duration(milliseconds: 60), (t) {
      tick++;
      // 提前返回：避免进度超过1.0
      if (progress.value >= 1.0) {
        t.cancel();
        _toSuccessPage();
        return;
      }
      // 进度缓动：后半段减速，呈现更自然的动画效果
      final double next = (tick / 40).clamp(0.0, 1.0);
      progress.value = next * 0.85 + (next * next) * 0.15;
    });
  }

  /// 进入完成页面并在2秒后自动返回
  void _toSuccessPage() {
    isCooling.value = false;
    showSuccess.value = true;
    statusText.value = '降温完成';

    // 在完成时联动健康分：按照目标降温值降低温度并更新评分
    try {
      final logic = Get.find<HealthScoreLogic>();
      // 将目标降温（默认3℃）同步到健康分（使用公开方法）
      logic.applyTemperatureDrop(targetDropDegrees.value);
      // 降温完成后：隐藏首页“手机降温”红点
      logic.showCooldownDot.value = false;
    } catch (_) {
      // 若未找到健康分控制器，忽略
    }

    // 2秒后自动返回上一页
    // Future.delayed(const Duration(seconds: 2), () {
    //   if (Get.isOverlaysClosed) {
    //     // 正常返回
    //     Get.back();
    //   } else {
    //     // 若有弹层等异常情况，仍尝试返回
    //     Get.back();
    //   }
    // });
  }

  @override
  void onClose() {
    _timer?.cancel();
    super.onClose();
  }
}